package com.fengyun.scala

import scala.collection.immutable.NumericRange

/**
 * @author Hanpeng
 * @date 2021/1/25 12:45
 * @description: 64位的浮点数,等价于java中的基本数据类型 double,同时也是scala.AnyVal的子类。
 *               Double 在底层运行的时候,不代表一个对象
 *               scala.Double => scala.runtime.RichDouble 提供了非基本数据类型的操作。
 */
object TestDouble {
  def main(args: Array[String]): Unit = {
    var d1: Double = 12.34562D; //D 和 d
    var f1: Float = 1.23f;//F 和 f
    var d2: Double = 12.34562D;//F 和 f
    // !=
    val bool1: Boolean = d1.!=(f1);//Float
    val bool2: Boolean = d1.!=(1L);//Long
    val bool3: Boolean = d1.!=(1);//Int
    // %
    println((12.44D).%(12))  //整除 然后剩余的部分 0.4399999999999995
    // *
    println(12.34D.*(2))   //两个数相乘  24.68

    // +  两个数相加
    // -  两个数相减
    // /  两个数相除
    println(12.34D./(2))   // 6.17
    // < <=   左边小于右边  左边小于或者等于
    // ==  相等
    println(12.34D.==(2))  //false
    println(12.34D.==(12.34D))  //true   12.34D.==(12.34F) false
    // > >=
    // toX  转换成其它数字类型 toByte  toChar toDouble toFloat toInt toLong toShort
    //unary_+ 返回本身
    println(12.34D.unary_+)  // 12.34
    println(-12.34D.unary_+)  // -12.34
    // unary_- 返回相反的数
    println(12.34D.unary_-)  // -12.34
    println(-12.34D.unary_-) // 12.34
    // abs 绝对值
    println(-12.35D.abs)  //12.35
    // ceil  向上取整 返回大于其的最小整数 (有个隐式转换)
    println(-12.36D.ceil)  // -12.0
    println(12.37D.ceil)// 13.0
    // A compare B  两个数进行比较
    //A>B  结果大于1
    //A==B 结果等于0
    //A<B  交过小于-1
    println(12.37D.compare(12.00D))
    println(12.00D.compare(12.00D))
    println(12.00D.compare(12.37D))
    //A compareTo B  看着 和compare 一样
    //12000.34D==>java.lang.Double
    //12.00D==>java.lang.Double
    //实际上调用的是java的API
    println(12000.34D.compareTo(12.00D))
    //floor 大于的最小整数
    println(-12.36D.floor)  // -12.0
    println(12.37D.floor)// 13.0
    println(-12.36D.ceil)  // -12.0
    println(12.37D.ceil)// 13.0
    //isInfinite() 定义的数据是有限的还是无限的
    //一般数字都是有限的 stream是无限的
    //isInfinity 正无穷大
    val jj:Double=0L;
    //这个数字就是无穷大的(正无穷大和负无穷大都返回true)
    println(((12D)./(0D)).isInfinity)  //true
    //isNaN
    val bds:Double = 0.0/0
    //Double = NaN
    println(bds.isNaN)
    println(bds.isNaN())
    //isNegInfinity 负无穷大
    //isPosInfinity 正无穷大
    //isValidShort  小数部分均为0 且整数部分short最大值和最小值之间
    println("================")
    println(123.123D.isValidShort) //false
    println(123.0D.isValidShort)  //true
    println(123.00D.isValidShort)  //true
    println(12333333333333333333333333333333D.isValidShort)  //true
    println("================")
    //isWhole()
    println(123.123D.isWhole()) //false
    println(123.00D.isWhole())  //true
    println(123.0D.isWhole())   //true
    println(123D.isWhole())     //true
    //max 较大值
    //min 较小值
    //round 四舍五入 不关心符号
    println("================")
    println(12.54D.round) //13
    println(12.45D.round)  //12
    println(-12.45D.round) //-12
    println(-12.54D.round) //-13
    println("================")
    //self
    println(12.54.self)
    //signum 正数1 负数-1 0 0
    println(12.54.signum) // 1
    println(-12.54.signum) // -1
    println(-0.signum) // 0
    println(0.signum)  // 0
    // to
    var beginTo:Double=2.34D;
    var endTo:Double=12.38D;
    // 2.34 4.34 6.34 8.34 10.34 12.34
    val doubles: NumericRange.Inclusive[Double] = beginTo.to(endTo, 2)
    println(doubles)
    //toDegrees  弧度转角度
    println(3.1415926.toDegrees) //179.99999692953102
    //角度转弧度
    println(180.toRadians)  //3.1415927
    //underlying() 转成引用 本身它是 AnyVal
    val value: AnyRef = 123.45.underlying()

    //until 对比to [)








    println()






  }
}
